#include <iostream>
#include <string>
#include "../comm/Logger.hpp"
#include "./CompileAndRun.hpp" 
#include "../comm/httplib.h"
using namespace ns_log;
using namespace httplib;
void Usage(char *msg)
{
    printf("warring msg:%s + port\n", msg);
}
// 准备一台编译服务的主机
// 主进程在listen,接受来自客户端的请求。交给子进程做。
// 负载情况需要上层控制. 负载数就可以理解成我要创建子进程的个数
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        return 0;
    }
    EnableConsoleLogStrategy();
    Server svr;
    svr.Post("/compile_run", [](const Request &res, Response &resp)
             {
        // 用户请求的服务正文是我们想要的json string
        std::string in_json = res.body;
        // LOG(LogLevel::DEBUG) << "这里测试以下我们构建的Json: " << in_json;
        std::string out_json;
        if(!in_json.empty())
        {
            ns_compileandrun::CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application=json; charset=utf-8");
        } });

    uint16_t port = atoi(argv[1]);
    svr.listen("0.0.0.0", port);

    // httplib的使用方法
    // Server server;
    // server.Get("/hi", [](const Request& , Response& resp){
    //     resp.set_content("hello world, 你好","text/plain; charset=utf-8");
    // });
    // server.set_base_dir("./wroot/");
    // server.listen("0.0.0.0", 8080);

    //  EnableConsoleLogStrategy();

    // // 构造没有输入的请求 JSON
    // Json::Value root;
    // root["code"] = R"(#include<iostream>
    // int main(){
    // std::cout << "hello world" << std::endl;
    // /*while(1);*/
    // /*int* p = new int[1024*1024*20];*/
    // aaaaaaaaaa;
    // return 0;
    // })";
    // root["input"] = "";
    // root["cpu_limit"] = 1;
    // root["mem_limit"] = 10; // 10MB

    // Json::StyledWriter writer;
    // std::string in_json = writer.write(root);
    // std::cout << in_json << std::endl;
    // // 网络发送请求
    // std::string out_json;

    // // 调用 CompileAndRun 服务
    // ns_compileandrun::CompileAndRun::Start(in_json, &out_json);

    // // 网络接受应答
    // // 输出结果
    // std::cout << "输出 JSON: " << std::endl;
    // std::cout << out_json << std::endl;

    return 0;
}